package com.chen.base.module.redis.inter;

import org.springframework.data.redis.connection.Message;
import org.springframework.data.redis.connection.MessageListener;
import org.springframework.data.redis.core.RedisTemplate;

import javax.annotation.Resource;

/**
 * redis消息发布/订阅抽象类
 * todo 注：如果消费端不在线，则掉线期间的消息将丢失，开发人员要明确认识这个情况
 * @author: ChenJinLong
 * @DATE: 2024/1/31
 **/
public abstract class RedisMsgListener<T> implements MessageListener {

    @Resource
    RedisTemplate<String, Object> redisTemplate;

    @Override
    public void onMessage(Message message, byte[] pattern) {
        Object body = redisTemplate.getValueSerializer().deserialize(message.getBody());
        consumeMsg((T) body);
    }

    /**
     * 渠道名称
     * @return 渠道名称
     */
    public abstract String channelName();

    /**
     * 消息消费
     * @param msg 消息
     */
    public abstract void consumeMsg(T msg);
}
